home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7y2.s < prev    next >
Text File  |  1994-11-28  |  6KB  |  226 lines

  1.  
  2. ; lezione7y2.s    barre verticali
  3.  
  4. ;     In questo esempio utiliziamo 2 sprite per fare delle barre verticali.
  5.  
  6.     SECTION    CiriCop,CODE
  7.  
  8. Inizio:
  9.     move.l    4.w,a6        ; Execbase
  10.     jsr    -$78(a6)    ; Disable
  11.     lea    GfxName(PC),a1    ; Nome lib
  12.     jsr    -$198(a6)    ; OpenLibrary
  13.     move.l    d0,GfxBase
  14.     move.l    d0,a6
  15.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  16.  
  17. ;    Puntiamo la PIC "vuota"
  18.  
  19.     MOVE.L    #BITPLANE,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     move.w    d0,6(a1)
  22.     swap    d0
  23.     move.w    d0,2(a1)
  24.  
  25. ;    NON Puntiamo lo sprite !!!!!!!!!!!!!!!!!!!!
  26.  
  27.     move.l    #COPPERLIST,$dff080    ; nostra COP
  28.     move.w    d0,$dff088        ; START COP
  29.     move.w    #0,$dff1fc        ; NO AGA!
  30.     move.w    #$c00,$dff106        ; NO AGA!
  31.  
  32. mouse:
  33.     cmpi.b    #$ff,$dff006    ; Linea 255?
  34.     bne.s    mouse
  35.  
  36.     bsr.s    MuoviSprite    ; Muove gli sprite 0 ed 1 orizzontalmente, ma
  37.                 ; agendo sui MOVE della COPPERLIST, dato
  38.                 ; che li visualiziamo tramite i registri
  39.                 ; diretti.
  40.  
  41. Aspetta:
  42.     cmpi.b    #$ff,$dff006    ; linea 255?
  43.     beq.s    Aspetta
  44.  
  45.     btst    #6,$bfe001    ; mouse premuto?
  46.     bne.s    mouse
  47.  
  48.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  49.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  50.  
  51.     move.l    4.w,a6
  52.     jsr    -$7e(a6)    ; Enable
  53.     move.l    gfxbase(PC),a1
  54.     jsr    -$19e(a6)    ; Closelibrary
  55.     rts
  56.  
  57. ;    Dati
  58.  
  59. GfxName:
  60.     dc.b    "graphics.library",0,0
  61.  
  62. GfxBase:
  63.     dc.l    0
  64.  
  65. OldCop:
  66.     dc.l    0
  67.  
  68. ; Questa routine sposta gli sprite agendo sulla copperlist, modificando
  69. ; il valore bar1 che viene caricato nel registro SPRxPOS, ossia
  70. ; il byte della  posizione X, immettendoci delle coordinate gia' stabilite
  71. ; nella tabella TABX
  72.  
  73. MuoviSprite:
  74.     ADDQ.L    #2,TABXPOINT     ; Fai puntare al byte successivo
  75.     MOVE.L    TABXPOINT(PC),A0 ; indirizzo contenuto in loong TABXPOINT
  76.                  ; copiato in a0
  77.     CMP.L    #FINETABX-2,A0  ; Siamo all'ultima longword della TAB?
  78.     BNE.S    NOBSTART    ; non ancora? allora continua
  79.     MOVE.L    #TABX-2,TABXPOINT ; Riparti a puntare dalla prima long
  80. NOBSTART:
  81.     MOVE.w    (A0),d1
  82.  
  83.     add.w    #128,D1        ; 128 - per centrare lo sprite.
  84.     btst.l    #0,D1        ; bit basso della coordinata X azzerato?
  85.     beq.s    BitBassoZERO
  86.     bset.b    #0,bar1_b    ; Settiamo il bit basso della bar
  87.     bra.s    PlaceCoords
  88.  
  89. BitBassoZERO:
  90.     bclr.b    #0,bar1_b    ; Azzeriamo il bit basso della bar
  91. PlaceCoords:
  92.     lsr.w    #1,D1        ; SHIFTIAMO, ossia spostiamo di 1 bit a destra
  93.  
  94.     move.b    D1,bar1        ; Poniamo il valore XX nel byte della posizione
  95.  
  96.     ADDQ.L    #2,TABXPOINT2     ; Fai puntare al byte successivo
  97.     MOVE.L    TABXPOINT2(PC),A0 ; indirizzo contenuto in loong TABXPOINT
  98.                  ; copiato in a0
  99.     CMP.L    #FINETABX-2,A0  ; Siamo all'ultima longword della TAB?
  100.     BNE.S    NOBSTART2    ; non ancora? allora continua
  101.     MOVE.L    #TABX-2,TABXPOINT2 ; Riparti a puntare dalla prima long
  102. NOBSTART2:
  103.     MOVE.w    (A0),d1
  104.     add.w    #128,D1        ; 128 - per centrare lo sprite.
  105.     btst.l    #0,D1        ; bit basso della coordinata X azzerato?
  106.     beq.s    BitBassoZERO2
  107.     bset.b    #0,bar2_b    ; Settiamo il bit basso della bar
  108.     bra.s    PlaceCoords2
  109.  
  110. BitBassoZERO2:
  111.     bclr.b    #0,bar2_b    ; Azzeriamo il bit basso della bar
  112. PlaceCoords2:
  113.     lsr.w    #1,D1        ; SHIFTIAMO, ossia spostiamo di 1 bit a destra
  114.  
  115.     move.b    D1,bar2        ; Poniamo il valore XX nel byte della posizione
  116.     rts
  117.  
  118. TABXPOINT:
  119.     dc.l    TABX-2
  120.     
  121. TABXPOINT2:            ; il puntatore per il secondo sprite e` diverso
  122.     dc.l    TABX+40-2
  123.     
  124. ; Tabella con coordinate X dello sprite precalcolate.
  125.  
  126. TABX:
  127.     incbin    "XCOORDINATOK.TAB"
  128.  
  129. FINETABX:
  130.  
  131.     SECTION    GRAPHIC,DATA_C
  132.  
  133. COPPERLIST:
  134. SpritePointers:
  135.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  136.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  137.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  138.     dc.w    $13e,0
  139.  
  140.     dc.w    $8E,$2c81    ; DiwStrt
  141.     dc.w    $90,$2cc1    ; DiwStop
  142.     dc.w    $92,$38        ; DdfStart
  143.     dc.w    $94,$d0        ; DdfStop
  144.     dc.w    $102,0        ; BplCon1
  145.     dc.w    $104,0        ; BplCon2
  146.     dc.w    $108,0        ; Bpl1Mod
  147.     dc.w    $10a,0        ; Bpl2Mod
  148.  
  149.             ; 5432109876543210
  150.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  151.  
  152. BPLPOINTERS:
  153.     dc.w $e0,0,$e2,0    ;primo     bitplane
  154.  
  155.     dc.w    $180,$000    ; color0    ; sfondo nero
  156.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  157.                         ; in questo caso e' vuoto,
  158.                         ; per cui non compare.
  159.  
  160.     dc.w    $1A2,$FF0    ; color17, ossia COLOR1 dello sprite0 - GIALLO
  161.     dc.w    $1A4,$a00    ; color18, ossia COLOR2 dello sprite0 - ROSSO
  162.     dc.w    $1A6,$F70    ; color19, ossia COLOR3 dello sprite0 - ARANCIO
  163.  
  164.  
  165.     dc.w    $2c07,$fffe    ; WAIT - aspetta il bordo superiore
  166.  
  167.     dc.w    $140        ; SPR0POS
  168.     dc.b    0        ; posizione verticale (non usata)
  169. bar1:    dc.b    0        ; posizione orizzontale
  170.     dc.w    $142        ; SPR0CTL
  171.     dc.b    0        ; VSTOP (non usato)
  172. bar1_b:    dc.b    0        ; quarto byte di controllo: viene usato il
  173.                 ; bit 0 che e` il bit basso della posizione
  174.                 ; orizzontale
  175.  
  176.     dc.w    $146,$0e70    ; SPR0DATB
  177.     dc.w    $144,$03c0    ; SPR0DATA - attiva lo sprite
  178.  
  179.     dc.w    $148        ; SPR1POS
  180.     dc.b    0
  181. bar2:    dc.b    0        ; posizione orizzontale
  182.     dc.w    $14a        ; SPR1CTL
  183.     dc.b    0
  184. bar2_b:    dc.b    0
  185.     dc.w    $14e,$3e7c    ; SPR1DATB
  186.     dc.w    $14c,$0ff0;db0    ; SPR1DATA - attiva lo sprite
  187.  
  188.  
  189.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  190.  
  191.  
  192.  
  193.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  194.                     ; perche' per vedere gli sprite
  195.                     ; e' necessario che ci siano bitplanes
  196.                     ; abilitati
  197. BITPLANE:
  198.     ds.b    40*256        ; bitplane azzerato lowres
  199.  
  200.     end
  201.  
  202.  
  203. Notate che siccome le colonne sono alte tutto lo schermo, non e` necessario
  204. scrivere nei registri SPRxCTL per disabilitare gli sprite.
  205.  
  206. Inserite questo pezzo di copperist appena prima del "dc.w $FFFF,$FFFE" per
  207. dare un tocco di colore al listato. (Amiga+b+c+i)
  208.  
  209.     dc.w    $5407,$fffe    ; WAIT
  210.     dc.w    $1A2,$FaF    ; color17    ; tono viola
  211.     dc.w    $1A4,$703    ; color18
  212.     dc.w    $1A6,$F0a    ; color19
  213.     dc.w    $6807,$fffe    ; WAIT
  214.     dc.w    $1A2,$aFa    ; color17    ; tono verde
  215.     dc.w    $1A4,$050    ; color18
  216.     dc.w    $1A6,$0a0    ; color19
  217.     dc.w    $7c07,$fffe    ; WAIT
  218.     dc.w    $1A2,$0FF    ; color17    ; tono blu
  219.     dc.w    $1A4,$00d    ; color18
  220.     dc.w    $1A6,$07F    ; color19
  221.     dc.w    $9007,$fffe    ; WAIT
  222.     dc.w    $1A2,$eee    ; color17    ; tono grigio
  223.     dc.w    $1A4,$444    ; color18
  224.     dc.w    $1A6,$888    ; color19
  225.  
  226.